<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Account Index</title>
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="/node_modules/layui/dist/css/layui.css" rel="stylesheet">
</head>
<body>

<div style="padding: 16px;">
    <table class="layui-hide" id="Account" lay-filter="Account"></table>
</div>
<script type="text/html" id="toolbarDemo">
    <div class="layui-btn-container">

        <form class="layui-form layui-row layui-col-space16" onsubmit="return false;">
            <div class="layui-col-md2">
                <div class="layui-input-wrap">
                    <div class="layui-input-prefix">
                        <i class="layui-icon layui-icon-username"></i>
                    </div>
                    <input type="text" name="name" value="" placeholder="请输入源作者名称" class="layui-input"
                           lay-affix="clear">
                </div>
            </div>
            <div class="layui-col-md2">
                <select id="platformSelect" name="platformName" lay-search=""
                        style="max-height: 100px;overflow-y: auto;">
                    <option value="">加载中...</option>
                </select>
            </div>

            <div class="layui-btn-container">
                <button id="search" class="layui-btn" lay-submit lay-filter="nameSearch">查找</button>
                <button class="layui-btn lay-submit" lay-event="addData">添加源账户</button>
                <button class="layui-btn lay-submit" lay-event="batchCrawlData">批量手动更新</button>
                <button id="delete" class="layui-btn layui-bg-red" lay-event="delete">批量删除</button>

            </div>
        </form>

    </div>
</script>
<script type="text/html" id="barDemo">
    <div class="layui-clear-space">
        <a class="layui-btn layui-btn-xs" lay-event="edit">编辑</a>
    </div>
</script>
<script src="/node_modules/layui/dist/layui.js"></script>
<script th:inline="none">
    layui.use(['jquery', 'table', 'dropdown', 'form'], function () {
        var $ = layui.jquery;
        var table = layui.table;
        var dropdown = layui.dropdown;
        var form = layui.form;
        var layer = layui.layer;


        /* **************** */
        /*      搜索提交     */
        /* **************** */
        form.on('submit(nameSearch)', function (data) {
            var field = data.field; // 获得表单字段
            var index = layer.load(0, {shade: false});
            // 执行搜索重载
            table.reload('Account', {
                url: '/account/accountSearch',
                method: 'POST',
                page: {
                    curr: 1
                },
                where: field,
                done: function () {
                    // 表单提交后，重新设置输入框的值
                    for (var key in field) {
                        $('[name="' + key + '"]').val(field[key]);
                    }
                    form.render('select');
                    layer.close(index); // 关闭 loading

                }
            });
            // layer.close(index);
            return false; // 阻止默认 form 跳转
        });

        /* **************** */
        /*     工具栏部分     */
        /* **************** */

        table.on('toolbar(Account)', function (obj) {
            /*var id = obj.config.id;
            var checkStatus = table.checkStatus(id);
            var othis = lay(this);*/
            var checkStatus = table.checkStatus('Account')
            var data = checkStatus.data; // 获取选中的数据
            // console.log("选中的数据：",data)
            var pageData = table.getData('Account');
            // console.log("选中的数据：",pageData)

            switch (obj.event) {
                case 'addData':
                    layer.open({
                        type: 2,
                        title: '添加源账户',
                        shade: 0.1,
                        area: ['60%', '80%'],
                        content: '/admin/account/add?id=0',
                        end: function () {
                            layer.load(0, {shade: false},1000);
                            table.reload('Account');
                        }
                    });
                    break;

                case 'batchCrawlData':
                    if (data.length === 0) return layer.msg('请至少选择一行');

                    layer.confirm('是否确认手动更新选中源作者视频？', {
                        btn: ['确定', '关闭'] //按钮
                    }, function () {
                        var index = layer.load(0, {shade: false});
                        var msg = '更新成功！';
                        var flag = true;
                        data.forEach(function (item) {
                            console.log("id:", item.accountId);
                            var id = {id: item.accountId};
                            $.ajax({
                                type: 'POST',
                                url: "/admin/freshCrawlData",
                                data: id,
                                dataType: 'Integer',
                                success: function (res) {
                                    if (res.code === -1) {
                                        msg = "更新失败：" + res.msg;
                                        flag = false;
                                    }
                                }
                            })
                        });
                        layer.close(index);
                        if(flag === true){
                            layer.msg(msg, {icon:1});
                        }else{
                            layer.msg(msg, {icon:2});
                        }
                        // table.reload('Account');
                    }, function () {

                    });
                    break;

                case 'delete':
                {
                    if (data.length === 0) return layer.msg('请至少选择一行');

                    layer.confirm('是否确认删除选中数据？', {
                        btn: ['确定', '关闭'] //按钮
                    }, function () {
                        var index = layer.load(0, {shade: false});
                        data.forEach(function (item) {
                            console.log("id:", item.accountId);
                            var id = {id: item.accountId};
                            $.ajax({
                                type: 'POST',
                                url: "/account/delete",
                                data: id,
                                dataType: 'Integer',
                                success: function (res) {

                                }
                            })
                        });

                        layer.close(index);
                        layer.msg("删除成功！", {icon:1})
                        table.reload('Account');
                        layer.load(0, {shade: false},1000);
                        setTimeout(function (){
                            layer.closeAll(); // 关闭所有弹出层
                        },1000)


                    }, function () {

                    });
                    break;
                }

            }
            return false;
        });

        /* ************************ */
        /*       单元格操作事件       */
        /* ************************ */
        // 触发单元格工具事件

        table.on('tool(Account)', function (obj) { // 双击 toolDouble
            var data = obj.data; // 获得当前行数据
            // console.log(obj)
            if (obj.event === 'edit') {
                layer.open({
                    type: 2,
                    title: '编辑源账户',
                    shade: 0.1,
                    area: ['60%', '80%'],
                    content: '/admin/account/add?id=' + data.accountId,
                    end: function () {
                        table.reload();
                    }
                });
            }
            /*
            else if (obj.event === 'more') {

                // 更多 - 下拉菜单
                dropdown.render({
                    elem: this, // 触发事件的 DOM 对象
                    show: true, // 外部事件触发即显示
                    data: [{
                        title: '查看绑定平台',
                        id: 'detail'
                    }, {
                        title: '删除',
                        id: 'del'
                    }],
                    click: function (menudata) {
                        // 查看绑定平台
                        if (menudata.id === 'detail') {
                            layer.open({
                                title: '编辑 - id:' + data.id,
                                type: 1,
                                area: ['80%', '80%'],
                                content: '<div style="padding: 16px;">自定义表单元素</div>'
                            });
                        } else if (menudata.id === 'del') {
                            layer.confirm('真的删除行 [id: ' + data.id + '] 么', function (index) {
                                obj.del(); // 删除对应行（tr）的DOM结构
                                layer.close(index);
                                // 向服务端发送删除指令
                            });
                        }
                    },
                    align: 'right', // 右对齐弹出
                    style: 'box-shadow: 1px 1px 10px rgb(0 0 0 / 12%);' // 设置额外样式
                })
            }
            */
            return false;
        });


        /* **************** */
        /*    渲染 table     */
        /* **************** */
        table.render({
            before: function (options) {
                // 使用 AJAX 请求获取选项数据
                $.ajax({
                    url: '/platform/platformAll',
                    type: 'POST',
                    dataType: 'json',
                    success: function (response) {

                        // 清空选择框
                        $('#platformSelect').empty();
                        // 添加默认选项
                        $('#platformSelect').append('<option value="">全部平台</option>');
                        // 根据返回的数据动态生成选项并添加到选择框中
                        $.each(response.data, function (index, item) {
                            $('#platformSelect').append('<option value="' + item.platformName + '">' + item.platformName + '</option>');
                        });

                    },
                    error: function (xhr, status, error) {
                        console.error('Failed to fetch options:', error);
                    }
                });
            },
            elem: '#Account',
            url: '/account/accountSearch', // 此处为静态模拟数据，实际使用时需换成真实接口
            // data:tempData,
            method: 'post',
            toolbar: '#toolbarDemo',
            defaultToolbar: ['filter', 'exports', 'print', {
                title: '提示',
                layEvent: 'LAYTABLE_TIPS',
                icon: 'layui-icon-tips'
            }],
            height: 'full-35', // 最大高度减去其他容器已占有的高度差
            css: [ // 重设当前表格样式
                '.layui-table-tool-temp{padding-right: 145px;}'
            ].join(''),
            cellMinWidth: 80,
            //totalRow: true, // 开启合计行
            page: true,
            limit: 20,
            limits: [20, 50, 100, 150, 200],
            cols: [[
                {type: 'checkbox', fixed: 'left'},
                {
                    fixed: 'left', width: '50', title: '序号', sort: true, templet: function (d) {
                        return d.LAY_INDEX + 1;
                    }
                },
                {field: 'id', title: 'id', hide: true},
                {field: 'name', width: '200', title: '源作者'},
                {field: 'platform', width: '80', title: '源平台', totalRow: '{{= parseInt(d.TOTAL_NUMS) }} 次'},
                {
                    field: 'url', width: '20%', minWidth: 200, title: '源作者主页', templet: function (d) {
                        return '<a style="color: #01aaed" href="' + d.accountUrl + '" target="_blank">' + d.accountUrl + '</a>'
                    }
                },
                {
                    field: 'avatarUrl', width: '20%', minWidth: 200, title: '源作者头像', templet: function (d) {
                        var avatarLink;
                        if (d.avatarUrl) {
                            avatarLink = '<a style="color: #01aaed" href="' + d.avatarUrl + '" target="_blank">' + d.avatarUrl + '</a>';
                        } else {
                            avatarLink = '无'; // 或者其他你想要显示的内容，比如空字符串
                        }
                        return avatarLink
                    }
                },
                {
                    fixed: 'right', width: '120', title: '下载进度', templet: function (d) {
                        var progress;
                        if (d.total) {
                            // 检查 downLoading 和 total 是否相等
                            if (d.totalDownload === d.total) {
                                // 如果相等，将 downLoading 设置为绿色
                                progress = '<span style="color: #16b777;">' + d.totalDownload + ' / ' + d.total + '</span>';
                            } else {
                                progress = '<span style="color: #ff5722;">' + d.totalDownload + ' / ' + d.total + '</span>';
                            }

                        } else {
                            progress = 'N/A'; // 或者其他提示文本
                        }
                        return progress;
                    }
                },
                {
                    fixed: 'right', width: '120', title: '上传进度', templet: function (d) {
                        var progress;
                        if (d.total) {
                            // 检查 downLoading 和 total 是否相等
                            if (d.totalUpload === d.total) {
                                // 如果相等，将 downLoading 设置为绿色
                                progress = '<span style="color: #16b777;">' + d.totalUpload + ' / ' + d.total + '</span>';
                            } else {
                                progress = '<span style="color: #ff5722;">' + d.totalUpload + ' / ' + d.total + '</span>';
                            }

                        } else {
                            progress = 'N/A'; // 或者其他提示文本
                        }
                        return progress;
                    }
                },
                // {field:'outerAccountId', width:180, title: '111'},
                // {field:'username', width:80, title: '用户'},
                // {field:'email', title:'邮箱 <i class="layui-icon layui-icon-tips layui-font-14" lay-event="email-tips" title="该字段开启了编辑功能" style="margin-left: 5px;"></i>', fieldTitle: '邮箱', hide: 0, width:150, expandedMode: 'tips', edit: 'text'},
                // {field:'sex', width:80, title: '性别', sort: true},
                // {field:'sign', title: '签名', edit: 'textarea', minWidth: 260, expandedWidth: 260, totalRow: '人物：<span class="layui-badge-rim">唐代：{{= d.TOTAL_ROW.era.tang }} </span> <span class="layui-badge-rim">宋代：{{= d.TOTAL_ROW.era.song }}</span> <span class="layui-badge-rim">现代：{{= d.TOTAL_ROW.era.xian }}</span>'},
                // {field:'experience', width: 100, title: '积分', sort: true, totalRow: '{{= d.TOTAL_NUMS }} 😊'},
                // {field:'checkin', title:'打卡', width: 100, sort: true, totalRow: '{{= parseInt(d.TOTAL_NUMS) }} 次'},
                // {field:'ip', title:'IP', width: 120},
                // {field:'joinTime', title:'加入时间', width: 120},
                {fixed: 'right', title: '操作', width: 100, toolbar: '#barDemo'}
            ]],
            done: function () {


                var id = this.id;
                // 下拉按钮测试
                /*
                dropdown.render({
                    elem: '#batchDeletion', // 批量删除
                    data: [{
                        id: 'deleteSelect',
                        title: '删除选中数据'
                    }, {
                        id: 'deletePage',
                        title: '删除本页数据'
                    }],
                    // 菜单被点击的事件
                    click: function (obj) {
                        var checkStatus = table.checkStatus(id)
                        var data = checkStatus.data; // 获取选中的数据
                        // console.log("选中的数据：",data)
                        var pageData = table.getData(id);
                        // console.log("选中的数据：",pageData)
                        switch (obj.id) {
                            case 'deleteSelect':
                                if (data.length === 0) return layer.msg('请至少选择一行');

                                layer.confirm('是否确认删除选中数据？', {
                                    btn: ['确定', '关闭'] //按钮
                                }, function () {
                                    var index = layer.load(0, {shade: false});
                                    // TODO: 执行批量删除选中
                                    data.forEach(function (item) {
                                        console.log("id:", item.accountId);
                                        var id = {id: item.accountId};
                                        $.ajax({
                                            type: 'POST',
                                            url: "/account/delete",
                                            data: id,
                                            dataType: 'Integer',
                                            success: function (res) {

                                            }
                                        })
                                    });

                                    table.reload('Account');
                                    layer.close(index);
                                    layer.confirm('删除成功', {
                                        btn:['关闭']
                                    },function() {
                                        layer.closeAll(); // 关闭所有弹出层
                                    });

                                }, function () {

                                });
                                break;

                        }
                    }
                });
                */

                /*
                dropdown.render({
                    elem: '#batchCrawlData', // 批量删除
                    data: [{
                        id: 'freshCrawlData',
                        title: '更新选中源作者视频'
                    }, {
                        id: 'freshCrawlDataAll',
                        title: '更新本页源作者视频'
                    }],
                    // 菜单被点击的事件
                    click: function (obj) {
                        var checkStatus = table.checkStatus(id)
                        var data = checkStatus.data; // 获取选中的数据
                        // console.log("选中的数据：",data)
                        var pageData = table.getData(id);
                        // console.log("选中的数据：",pageData)
                        switch (obj.id) {
                            case 'freshCrawlData':
                                if (data.length === 0) return layer.msg('请至少选择一行');

                                layer.confirm('是否确认手动更新选中源作者视频？', {
                                    btn: ['确定', '关闭'] //按钮
                                }, function () {
                                    var index = layer.load(0, {shade: false});

                                    data.forEach(function (item) {
                                        console.log("id:", item.accountId);
                                        var id = {id: item.accountId};
                                        $.ajax({
                                            type: 'POST',
                                            url: "/admin/freshCrawlData",
                                            data: id,
                                            dataType: 'Integer',
                                            success: function (res) {

                                            }
                                        })
                                    });

                                    table.reload('Account');
                                    layer.close(index);
                                    layer.confirm('删除成功', {
                                        btn:['关闭']
                                    },function() {
                                        layer.closeAll(); // 关闭所有弹出层
                                    });

                                }, function () {

                                });
                                break;

                        case 'freshCrawlDataAll':
                            layer.confirm('是否确认删除本页数据？', {
                                btn: ['确定', '关闭'] //按钮
                            }, function(){
                                var index = layer.load(0, {shade: false});
                                console.log(index);
                                pageData.forEach(function(item){
                                    var id ={id:item.id};
                                    $.ajax({
                                        type: 'POST',
                                        url: "/account/delete",
                                        data: id,
                                        dataType: 'Integer',
                                        beforeSend: function () {
                                        },
                                        success: function (rs) {
                                            console.log(rs);
                                            layer.close(index);
                                            layer.msg('删除成功', {
                                                icon: 1,
                                                time: 1000
                                            });
                                        },
                                        error: function (rs) {
                                            console.log(rs);
                                            layer.close(index);
                                            layer.msg('删除失败', {
                                                icon: 0,
                                                time: 1000
                                            });
                                        }
                                    })
                                })


                                table.reload('Account');

                            }, function(){

                            });
                            break;

                        }
                    }
                });
                */

                // 行模式
                dropdown.render({
                    elem: '#rowMode',
                    data: [{
                        id: 'default-row',
                        title: '单行模式（默认）'
                    }, {
                        id: 'multi-row',
                        title: '多行模式'
                    }],
                    // 菜单被点击的事件
                    click: function (obj) {
                        var checkStatus = table.checkStatus(id)
                        var data = checkStatus.data; // 获取选中的数据
                        switch (obj.id) {
                            case 'default-row':
                                table.reload('Account', {
                                    lineStyle: null // 恢复单行
                                });
                                layer.msg('已设为单行');
                                break;
                            case 'multi-row':
                                table.reload('Account', {
                                    // 设置行样式，此处以设置多行高度为例。若为单行，则没必要设置改参数 - 注：v2.7.0 新增
                                    lineStyle: 'height: 95px;'
                                });
                                layer.msg('即通过设置 lineStyle 参数可开启多行');
                                break;
                        }
                    }
                });

                layer.closeAll();
            },
            error: function (res, msg) {
                layer.closeAll();
                console.log(res, msg)
            }
        });


        // 触发表格复选框选择
        table.on('checkbox(Account)', function (obj) {

        });


        /** ******************************* **/
        /**             以下无用             **/
        /** ******************************* **/
        {


            /* ************************ */
            /* ❌（无用）绑定自定义工具事件  */
            /* ************************ */
            // 在表格渲染时的列元素绑定 lay-event="email-tips"
            // 表头自定义元素工具事件 --- 2.8.8+
            table.on('colTool(Account)', function (obj) {
                var event = obj.event;
                console.log(obj);
                if (event === 'email-tips') {
                    layer.alert(layui.util.escape(JSON.stringify(obj.col)), {
                        title: '当前列属性配置项'
                    });
                }
            });

            // 触发表格单选框选择
            table.on('radio(Account)', function (obj) {
                console.log(obj)
                alert("单选")
            });

            // 行单击事件
            table.on('row(Account)', function (obj) {
                //console.log(obj);
                //layer.closeAll('tips');

            });
            // 行双击事件
            table.on('rowDouble(Account)', function (obj) {
                console.log(obj);
            });

            // 单元格编辑事件
            table.on('edit(Account)', function (obj) {
                var field = obj.field; // 得到字段
                var value = obj.value; // 得到修改后的值
                var data = obj.data; // 得到所在行所有键值
                // 值的校验
                if (field === 'email') {
                    if (!/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/.test(obj.value)) {
                        layer.tips('输入的邮箱格式不正确，请重新编辑', this, {tips: 1});
                        return obj.reedit(); // 重新编辑 -- v2.8.0 新增
                    }
                }
                // 编辑后续操作，如提交更新请求，以完成真实的数据更新
                // …
                layer.msg('编辑成功', {icon: 1});

                // 其他更新操作
                var update = {};
                update[field] = value;
                obj.update(update);
            });
        }
    });
</script>
</body>
</html>
